<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 函数：是用来封装代码的，主要就是重复利用代码
    // function 函数名(参数1,参数2,...){
    //   return 返回值;
    // }

    // function add(a, b){ //a, b是形参（形式上的参数）
    //   return  a + b;
    // }

    // console.log(add(3,4));//3 ,4是形参（实际上的参数）

    // function test(){
    //   console.log('hehe');
    // }
    // test();
    // test();
    // test();

    // let b = 5;  //全局变量

    // 什么时候一个函数会需要返回值呢？
    // 大多数情况下就是想将一个函数中的数据在函数外面使用

    // function test(){
    //   let a = 5; // 局部变量
    //   console.log(a); // => 5
    //   return a;
    // }
    // let c = test();
    // console.log(c);

    // let a;  //定义全局
    // function test(){
    //   a = 5;
    //   console.log(a);
    // }
    // test();
    // console.log(a);

    // arguments
    // function test(name,age) {
    //   // console.log(name,age,arguments[2]);//arguments：是函数中自带的一个数组，数组从0开始，该数组中包含所有实参
    //   for(let i = 0; i<arguments.length;i++){ //arguments.length永远比【i】大1
    //     console.log(arguments[i]);
    //   }
    // }
    // test('lisi',23,'男');

    // 函数式编程！！！！！

    // test();
    // // 函数声明（此写法）:函数提升（hoist）
    // function test() {
    //   console.log('haha');
    // }

    // 函数表达式
    // let test = function(){
    //   console.log('hehe');
    // }
    // test();

    // let test = new Function("console.log('hehe')")
    // test();

    // 函数式编程！！！！！
    // 1.函数可以作为一个值赋值给一个变量
    // let test = function(){
    //   console.log('hehe');
    // }
    // 2.函数可以作为一个值，在另外一个函数中返回
    // fuction fn1(){
    //   return fuction(){
    //     console.log('haha');
    //   }
    // }

    // let fn2 = fn1() = function () {
    //     console.log('haha');
    // }
    // fn1()();
    
    // 3.函数可以作为一个值，传给另外一个函数
    // function fn1(a) {
    //     a(function (c) {
    //        c();
    //     });
    // }

    // fn1(function (b) {
    //     b(function () {
    //         console.log('haha');
    //     });
    // });

    // 小示例
    function fn1(a){
      console.log(a()());
    }

    fn1(function(){
      return function(){
        return "hahaha"
      }
    });

  </script>
</body>
</html>